#ifndef _TABLE_
#define _TABLE_

#include "poly.h"


#define TABLE_SIZE 30

typedef struct {
    P_x *HT[TABLE_SIZE];
} HashTable; //创建一个哈希表，每个表项对应一个桶，桶中是多项式，这个是做初始化用的。

typedef struct {
    o_x *ox[TABLE_SIZE];
} o_table; //中间态，用来临时计算

typedef struct {
    z_x *ztable[TABLE_SIZE];
} z_table; //用户自己保有

typedef struct {
    o_x *ohat[TABLE_SIZE];
} o_hat_table; //发送给云平台的混淆后的哈希表

typedef struct {
    roots *r_table[TABLE_SIZE];
} roots_table; //每个用户都自己持有一个多项式初始化随机数根的表格

typedef struct {
    int num[TABLE_SIZE]; //记录一下每个桶里面目前有多少个元素。
} num_table;

typedef struct //被委托用户生成的随机掩码多项式
{
    w_x *wx_table[2][TABLE_SIZE];
} w_table;

typedef struct {
    z_x *z_secret_table[2][TABLE_SIZE];
} z_secret; //用户生成自己z(x)函数的秘密分享值

typedef struct {
    q_x *my_qtable[TABLE_SIZE];
    q_x *other_qtable[TABLE_SIZE];
    q_x *final_qtable[TABLE_SIZE];
} q_table; //生成求交的RIE表格

typedef struct {
    t_x *User_A_t_table[TABLE_SIZE];
    t_x *User_B_t_table[TABLE_SIZE];
    t_x *final_t_table[TABLE_SIZE];
} t_table;

typedef struct {
    rie_x *my_rie_table[TABLE_SIZE]; //这里是存放隐私求交的结果表格
} rie_table;


typedef struct 
{
    z_ss_x *ss_table[TABLE_SIZE];
    int share_num; //标记一下这是第几份分享
    //这里我们暂定其他用户数量为4，其中随机三个人就可以恢复我们的原始数据，所以我们把原始的z(x)分为了6份
}my_secret_share_table; //这个表格里面暂存用户自己生成的，待分发的


typedef struct 
{
    z_ss_x *other_ss_table[USER_NUMBER-1][3][TABLE_SIZE]; 
    //自己的z（x）不用存储，所以是USER_NUMBER-1；
    //每个用户的sss存三份，所以是3；
    //每个表是完整的表大小，所以是table_size。

}other_secret_share_table;//这个表格里面接收其他用户的秘密分享表


#endif